
//订阅发布类
//创建一个map管理注册消息名，与对应的回调函数
//该类能够注册消息监听--on 传递key名，与回调，注册保持在静态属性map中
//该类能够注册消息监听，并将回调函数的this指向改变--bind 传递key名与回调与this指向，注册保持在静态属性map中，不同的是回调指向的是参数中传递的对象
//该类能够发送消息触发监听--emit，传递key名与参数，触发map中对应的回调，回调可能是多个需要
//该类能够关闭消息监听--off,传递key名与回调，删除注册中监听 
export class Msg {
    private static _map={};

    public static on(key:string,fun:any){
        if(!this._map[key]){
            this._map[key]=[]
        }
        this._map[key].push(fun)
    }

    public static bind(key,fun,target){
        fun = fun.bind(target);
        if(!this._map[key]){
            this._map[key]= []
        }
        this._map[key].push(fun)
    }
    
    public static off(key,fun){
        if(fun==null){
            this._map[key]=null;
        }else{
            var index = this._map[key].indexOf(fun);
            this._map[key].spilic(index,1)
        }
    }

    public static emit(key, data?: any){
        var funs = this._map[key];
        if(funs){
            funs.forEach(element => {
                element(data);
            });
        }
    }
}


